﻿package com.zouloux.utils 
{
	/**
	 * Une classe utilitaire permettant de gérer plus facilement les tableaux.
	 * Ces méthodes statiques ne fonctionnent que pour des tableaux indexés.
	 * @author ZoulouX
	 */
	public class ArrayUtils 
	{
		/**
		 * Vérifier si un élément est présent dans un tableau
		 * @param	pArray : Le tableau en question
		 * @param	pElement : La valeur recherche
		 * @return : true si l'élément à été trouvé
		 */
		public static function inArray (pArray:Array, pElement:*):Boolean
		{
			// Mesurer le tableau
			var total:uint = pArray.length;
			
			// Parcourir le tableau
			for (var i:int = 0; i < total; i++)
			{
				// Si on trouve l'élément on retourne true
				if (pArray[i] == pElement)
					return true;
			}
			
			// On l'a pas trouvé
			return false;
		}
		
		/**
		 * Vérifier si un tableau contient bien un certain index
		 * @param	pArray : Le tableau à traiter
		 * @param	pIndex : L'index à vérifer
		 * @return : true si l'index à été trouvé
		 */
		public static function indexExists (pArray:Array, pIndex:uint):Boolean
		{
			// Simplement retourner si l'élément associé à l'index est nul
			return pArray[pIndex] != null;
		}
		
		/**
		 * Récupérer l'index d'un élément
		 * @param	pArray : Le tableau à traiter
		 * @param	pElement : L'élément en question
		 * @return : -1 si l'élément n'a pas été trouvé. Sinon retourne l'index de l'élément
		 */
		public static function getIndex (pArray:Array, pElement:*):int
		{
			// Mesurer le tableau
			var total:uint = pArray.length;
			
			// Parcourir le tableau
			for (var i:int = 0; i < total; i++) 
			{
				// Si on trouve l'élément, on retourne l'index en cours
				if (pArray[i] == pElement)
					return i;
			}
			
			// Pas trouvé, retourner -1,
			return -1;
		}
		
		/**
		 * Effacer un élément dans un tableau
		 * @param	pArray : Le tableau à traiter
		 * @param	pElement : La référence vers l'élément à supprimer
		 * @return : Le tableau avec l'élément en moins si l'élément à été trouvé
		 */
		public static function deleteElement (pArray:Array, pElement:*):Array
		{
			// Créer le nouveau tableau
			var newTab:Array = [];
			
			// Mesurer le tableau
			var total:uint = pArray.length;
			
			// Parcourir le tableau
			for (var i:int = 0; i < total; i++) 
			{
				// Si c'est pas l'élément en question, on ajoute au nouveau tableau
				if (pArray[i] != pElement)
					newTab.push(pArray[i]);
			}
			
			// Retourner le nouveau tableau sans l'élément
			return newTab;
		}
		
		/**
		 * Effacer un index dans un tableau
		 * @param	pArray : Le tableau à traiter
		 * @param	pIndex : L'index à supprimer du tableau
		 * @return : Le tableau avec l'élément en moins si son index à été trouvé
		 */
		public static function deleteIndex (pArray:Array, pIndex:uint):Array
		{
			// Créer le nouveau tableau
			var newTab:Array = [];
			
			// Mesurer le tableau
			var total:uint = pArray.length;
			
			// Parcourir le tableau
			for (var i:int = 0; i < total; i++) 
			{
				// Ajouter dans le nouveau tableau si l'index n'est pas celui à enlever
				if (i != pIndex)
					newTab.push(pArray[i]);
			}
			
			// Retourner le nouveau tableau sans l'élément
			return newTab;
		}
	}
}